package ch03;

public class SqStack implements IStack{//这是顺序栈
    private Object[] stackElem;//对象数组
    private int top;//在飞空栈中，top始终指向栈顶元素的下一个存储位置；当栈为空时，top值为0

    //栈的构造函数，构造一个存储空间容量为maxSize的空栈
    public SqStack(int maxSize) {
        top = 0;//初始化top为0
        stackElem = new Object[maxSize];//为栈分配maxSize个存储单元
    }

    //栈置空
    public void clear(){
        top = 0;
    }

    //判断栈是否为空
    public boolean isEmpty() {
        return top == 0;
    }

    //求栈中数据元素个数
    public int length() {
        return top;
    }

    //取栈顶元素
    public Object peek() {
        if (!isEmpty())//栈非空
            return stackElem[top-1];//返回栈顶元素
        else
            return null;
    }

    //入栈
    public void push(Object x) throws Exception{
        if (top == stackElem.length)//栈满
            throw new Exception("栈已满");//抛出异常
        else
            stackElem[top++] = x;//先将新的数据元素x压人栈顶，再top增1
    }

    //出栈
    public Object pop() {
        if (isEmpty())//栈空
            return null;
        else    //栈非空
            return stackElem[--top];
    }

    //输出栈中所有数据元素（从栈顶元素到栈底元素）
    public void display() {
        for (int i = top - 1; i >= 0; i++)
            System.out.print(stackElem[i].toString() + " ");//输出
    }
}//顺序栈类的描述结束
